package negModel;

import java.util.*;
import negModelExcep.eSinFondos;

public class Modelo extends Observable{
	
	private PersonajeJugador jugador;
	private Carrera carreraActual;
	private Pista pistaActual;
	private Auto oponenteActual;
	private AlgoPesos ultimoPremio;
	
	public Modelo(){
				
	}
	
	public Modelo(PersonajeJugador j, double premioinicial,Pista pista,Auto oponente){
		
		ultimoPremio=new AlgoPesos(premioinicial);
		jugador=j;
		pistaActual=pista;
		oponenteActual=oponente;
		
	
	}
		
	public void CrearCarrera(){
		Vehiculo vjugador= jugador.getVehiculo();
		if(vjugador instanceof Auto){
			carreraActual = new Carrera(pistaActual,(Auto)vjugador,oponenteActual,ultimoPremio);
			ActualizarObservadores();
		
		}
	}

	public void iniciarCarrera(){
				
		carreraActual.iniciarCarrera();
		
	}
	
	public void SumarPremio(){
		jugador.sumar(ultimoPremio.getMonto());
		ActualizarObservadores();
	}
	
	public void DescontarPremio(){
		
		try {
			jugador.pagar(ultimoPremio.getMonto());
		} catch (eSinFondos e) {
			e.printStackTrace();
		}
		ActualizarObservadores();
	}
	
	
	public Pista getPistaActual(){
		return(pistaActual);
		
	}
	
	public Carrera getCarreraActual(){
		return(carreraActual);
	}
	
	public Vehiculo getVehiculoJugador(){
		return(jugador.getVehiculo());
		
	}

	public Vehiculo getVehiculoOponente(){
		return(oponenteActual);
		
	}
	
	public void addObserver(Observer o){
		
		super.addObserver(o);
		jugador.getVehiculo().addObserver(o);
		oponenteActual.addObserver(o);
		getCarreraActual().getSemaforo().addObserver(o);
		
	}
	
	public void ActualizarObservadores(){
		
		setChanged();
		notifyObservers();		
	}

	public void setJugador(PersonajeJugador j) {
		jugador=j;
		
	}

	public void terminarCarrera() {
		this.carreraActual.terminarCarrera();
		
	}
	
		
}

